package br.com.edoc.inicializador;

import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction;
import br.com.edoc.entidade.EntidadePadrao;
import br.com.edoc.fabrica.Atendente;
import br.com.edoc.hibernate.HibernateUtilitario;

public abstract class InicializadorPadrao {
	public Atendente atendente;
	private Session session;
	private Transaction transacao;
	
	public <T extends EntidadePadrao> EntidadePadrao obterEntidadeForId(Class<T> obj,Integer id){
		Object query = getSession().load(obj, id);
		Hibernate.initialize(query);
		return (EntidadePadrao)query;
	}
	
	
	
	public Session getSession() {
		if(session ==null){
			setSession(HibernateUtilitario.currentSession());
		}
		return session;
	}
	public void setSession(Session session) {
		this.session = session;
	}
	public Transaction getTransacao() {
		setTransacao(getSession().beginTransaction());
		return transacao;
	}
	public void setTransacao(Transaction transacao) {
		this.transacao = transacao;
	}
	public void comit(){
		getTransacao().commit();
	}
	public void rowback(){
		getTransacao().rollback();
	}
	public void close(){
		getSession().close();
	}
	public abstract Object inicializar(Object obj);
	
	public Atendente getAtendente() {
		if(atendente==null){
			atendente = Atendente.getInstancia();
		}
		return atendente;
	}

	public void setAtendente(Atendente atendente) {
		this.atendente = atendente;
	}
}
